// ++++++++++++++++++++++++++++++++++++++++
// 《零基础Go语言算法实战》源码
// ++++++++++++++++++++++++++++++++++++++++
// Author:廖显东（ShirDon）
// Blog:https://www.shirdon.com/
// Gitee:https://gitee.com/shirdonl/goAlgorithms.git
// Buy link :https://item.jd.com/14101229.html
// ++++++++++++++++++++++++++++++++++++++++

package main

import "fmt"

// 此函数使用 Shell 排序算法对整数切片进行排序
func shellSort(array []int) {
	// 从一个大的差距开始，并在每次迭代中将其除以 2
	for gap := len(array) / 2; gap > 0; gap /= 2 {
		// 遍历切片中的每个元素
		for i := gap; i < len(array); i++ {
			// 对每组被当前间隙隔开的元素进行插入排序
			for j := i; j >= gap && array[j-gap] > array[j]; j -= gap {
				array[j], array[j-gap] = array[j-gap], array[j]
			}
		}
	}
}

func main() {
	array := []int{33, 23, 56, 7, 8, 18, 99, 28}
	shellSort(array)
	fmt.Println(array)
}

//$ go run shellSort.go
//[7 8 18 23 28 33 56 99]
